package com.zzyl.framework.config;

import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.region.Region;
import com.huaweicloud.sdk.iotda.v5.IoTDAClient;
import com.zzyl.framework.config.properties.HuaWeiIotConfigProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 华为云IoTDA客户端配置类
 *
 * 用于创建和配置华为云IoTDA（设备接入服务）客户端实例，
 * 通过读取 [HuaWeiIotConfigProperties](file://D:\Idea\IntelliJ%20IDEA%202024.1.4\Project%20location\zzyl\zzyl-framework\src\main\java\com\zzyl\framework\config\properties\HuaWeiIotConfigProperties.java#L13-L145) 配置属性来构建认证凭证和客户端连接。
 *
 * 主要功能：
 * - 创建 `IoTDAClient` Bean实例
 * - 配置认证信息（AK/SK、项目ID等）
 * - 设置连接区域和终端节点
 *
 * @author 布莱恩
 * @since 1.0.0
 */
@Configuration
public class IotClientConfig {

    @Autowired
    private HuaWeiIotConfigProperties huaWeiIotConfigProperties;

    /**
     * 创建华为IoTDA客户端Bean
     *
     * @return IoTDAClient 华为IoTDA客户端实例
     */
    @Bean
    public IoTDAClient huaWeiIotClient() {
        // 构建认证凭证对象
        ICredential auth = new BasicCredentials()
                .withAk(huaWeiIotConfigProperties.getAk())
                .withSk(huaWeiIotConfigProperties.getSk())
                // 标准版/企业版需要使用衍生算法，基础版请删除配置"withDerivedPredicate"
                .withDerivedPredicate(BasicCredentials.DEFAULT_DERIVED_PREDICATE)
                .withProjectId(huaWeiIotConfigProperties.getProjectId());

        // 构建并返回IoTDA客户端实例
        return IoTDAClient.newBuilder()
                .withCredential(auth)
                // 标准版/企业版：需自行创建Region对象，基础版：请使用IoTDARegion的region对象，如"withRegion(IoTDARegion.CN_NORTH_4)"
                .withRegion(new Region(huaWeiIotConfigProperties.getRegionId(), huaWeiIotConfigProperties.getEndpoint()))
                // .withRegion(IoTDARegion.CN_NORTH_4)
                .build();
    }


}
